package com.llsydn.beijingnews.pager;

import android.content.Context;
import android.os.SystemClock;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.View;
import android.widget.TextView;
import com.android.volley.NetworkResponse;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.HttpHeaderParser;
import com.android.volley.toolbox.StringRequest;
import com.google.gson.Gson;
import com.llsydn.beijingnews.activity.MainActivity;
import com.llsydn.beijingnews.base.BaseMenuDetailPager;
import com.llsydn.beijingnews.base.BasePager;
import com.llsydn.beijingnews.common.Constants;
import com.llsydn.beijingnews.domain.NewsBean;
import com.llsydn.beijingnews.fragment.LeftmenuFragment;
import com.llsydn.beijingnews.menudetailpager.InteracMenuDetailPager;
import com.llsydn.beijingnews.menudetailpager.NewsMenuDetailPager;
import com.llsydn.beijingnews.menudetailpager.PhotosMenuDetailPager;
import com.llsydn.beijingnews.menudetailpager.TopicMenuDetailPager;
import com.llsydn.beijingnews.util.CacheUtils;
import com.llsydn.beijingnews.util.LogUtil;
import com.llsydn.beijingnews.volley.VolleyManager;
import org.xutils.common.Callback;
import org.xutils.http.RequestParams;
import org.xutils.x;

import java.util.ArrayList;
import java.util.List;

/**
 * @author lilinshen
 * @title 新闻中心页面
 * @description 请填写相关描述
 * @date 2018/10/25 11:51
 */
public class NewsPager extends BasePager {
    // 左侧菜单的数据
    public List<NewsBean.DataBean> data;
    // 详情页面的集合
    private ArrayList<BaseMenuDetailPager> list;
    private long startTime;

    public NewsPager(Context context) {
        super(context);
    }

    @Override
    public void initData() {
        super.initData();
        LogUtil.e("新闻中心数据被初始化了...");
        // 显示顶部左侧按钮
        ib_menu.setVisibility(View.VISIBLE);
        // 设置标题
        tv_title.setText("新闻中心");

        // 联网请求得到数据，创建视图
        TextView textView = new TextView(context);
        textView.setTextSize(20);
        textView.setGravity(Gravity.CENTER);

        // 把子视图添加得到basepager的FrameLayout中
        fl_content.addView(textView);

        // 绑定数据
        textView.setText("新闻中心内容");

        // 获取缓存数据
        String jsonData = CacheUtils.getString(context, Constants.NEW_CENTER_URL);
        LogUtil.e("缓存数据=" + jsonData);
        if (!TextUtils.isEmpty(jsonData)) {
            processData(jsonData);
        }

        // 联网请求数据
        // getDataFromWebServer();

        startTime = SystemClock.uptimeMillis();

        // 使用volley联网请求数据
        getDataFromWebServerByVolley();
    }

    /**
     * 使用volley联网请求数据(并解决中文乱码问题)
     */
    private void getDataFromWebServerByVolley() {
        // 请求队列
        // RequestQueue queue = Volley.newRequestQueue(context);
        // String请求
        StringRequest request = new StringRequest(Request.Method.GET, Constants.NEW_CENTER_URL, new Response.Listener<String>() {
            @Override
            public void onResponse(String result) {
                long endTime = SystemClock.uptimeMillis();
                long passTime = endTime - startTime;
                LogUtil.e("Volley花费时间==" + passTime);
                LogUtil.e("使用volley加载更多请求成功==" + result);
                // 缓存数据
                CacheUtils.putString(context, Constants.NEW_CENTER_URL, result);
                // 处理数据
                processData(result);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                LogUtil.e("使用volley加载更多请求失败==" + volleyError.getMessage());

            }
        }) {
            @Override
            protected Response<String> parseNetworkResponse(NetworkResponse response) {
                try {
                    String parsed = new String(response.data, "UTF-8");
                    return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response));
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return super.parseNetworkResponse(response);
            }
        };
        // 添加到队列
        VolleyManager.getRequestQueue().add(request);
    }

    /**
     * 使用xutils3联网请求
     */
    private void getDataFromWebServer() {
        RequestParams params = new RequestParams(Constants.NEW_CENTER_URL);
        // 发送http的get请求
        x.http().get(params, new Callback.CommonCallback<String>() {
            @Override
            public void onSuccess(String result) {
                long endTime = SystemClock.uptimeMillis();
                long passTime = endTime - startTime;
                LogUtil.e("xutils3花费时间==" + passTime);
                LogUtil.e("使用xutils3联网请求成功==" + result);
                // 缓存数据
                CacheUtils.putString(context, Constants.NEW_CENTER_URL, result);
                // 处理数据
                processData(result);
                // 设置适配器
            }

            @Override
            public void onError(Throwable ex, boolean isOnCallback) {
                // LogUtil.e("使用xutils3联网请求失败==" + ex.getMessage());
                LogUtil.e("使用xutils3联网请求失败");
            }

            @Override
            public void onCancelled(CancelledException cex) {
                LogUtil.e("使用xutils3联网请求取消==" + cex.getMessage());
            }

            @Override
            public void onFinished() {
                LogUtil.e("使用xutils3联网请求完成==");
            }
        });
    }

    /**
     * 解析json数据和显示数据
     *
     * @param result
     */
    private void processData(String result) {
        NewsBean newsBean = parseJson(result);
        String title = newsBean.getData().get(0).getChildren().get(1).getTitle();
        LogUtil.e("使用gson解析数据成功:title=" + title);
        // 给左侧菜单传递数据（mainactivity传递给leftmenufragment）
        data = newsBean.getData();

        // 添加详情页面
        list = new ArrayList<>();
        list.add(new NewsMenuDetailPager(context, data.get(0)));
        list.add(new TopicMenuDetailPager(context, data.get(0)));
        list.add(new PhotosMenuDetailPager(context, data.get(2)));
        list.add(new InteracMenuDetailPager(context, data.get(2)));

        // 把数据传递给左侧菜单（通过mainactivity获取leftmentfragment）
        MainActivity mainActivity = (MainActivity) context;
        LeftmenuFragment leftmenuFragment = mainActivity.getLeftmenuFragment();
        leftmenuFragment.setData(data);

    }

    /**
     * 解析json数据
     *
     * @param result
     * @return
     */
    private NewsBean parseJson(String result) {
        return new Gson().fromJson(result, NewsBean.class);
    }

    public void swichPager(int position) {
        // 设置标题
        tv_title.setText(data.get(position).getTitle());
        // 移除内容
        fl_content.removeAllViews();
        //添加新内容（需要初始化数据）
        list.get(position).initData();
        fl_content.addView(list.get(position).rootView);

        if (position == 2) {
            // 图组
            ib_swich_list_grid.setVisibility(View.VISIBLE);
            // 设置点击事件
            ib_swich_list_grid.setOnClickListener((view)->{
                // 得到图组对象
                PhotosMenuDetailPager photoPager = (PhotosMenuDetailPager) list.get(2);

                // 调用图组对象的切换listview和grdiview
                photoPager.switchListAndGrid(ib_swich_list_grid);

            });

        } else {
            ib_swich_list_grid.setVisibility(View.GONE);
        }
    }
}
